//引入模块
const express = require("express");
//引入连接池
const query = require("../util/query.js");
const JWT = require('../util/token.js');

//创建空路由器
let router = express.Router();
//=================================================
// 分类模块  
// ================================================
// 获取一级分类列表数据(数据量不多，就不作分页处理了，本项目只有一级分类，且分类项没有图片属性)
// GET /category/list 
// 参数：无
router.get("/list", async (req, res) => {
  try {
    //建sql语句  
    let sql = `select id,name, img from lz_plant_family order by id `;
    //执行Query
    let result = await query(sql);
    //处理返回数据，（返回记录数量是0也是一种成功），响应对象    
    let data = result;//第2个SQL语句的执行结果     
    res.send({
      code: 1,
      msg: "获取成功",
      data
    });
  } catch (error) {
    res.send({ code: -1, msg: error.message });
  }
});


//===============================================
//删除分类ById  
//GET /category/delete
//参数 id (分类id)
router.get("/delete", async (req, res) => {
  //验证用户Token 请求头中携带Token  req.headers.authorization=
  let user = JWT.getUser(req, res);
  if (user == null) return;

  try {
    //获取数据
    let id = req.query.id;
		id = parseInt(id) ;
    //验证数据
    if (!id) throw new Error("编号Id不能为空");
    //执行SQL语句
    let sql = `DELETE FROM lz_plant_family WHERE id = ${id}`;
    let result = await query(sql);
    //根据sql操作影响的记录行数，判断是否删除成功
    if (result.affectedRows > 0) {
      res.send({ code: 1, msg: `删除成功 ：id=${id}` });
      return;
    }
    throw new Error(`没有编号为${id}的数据`);
  } catch (error) {
    res.send({ code: -1, msg: error.message });
  }
});


//===============================================
//修改 / 新增分类  如果id不空则修改，id空则新增
//POST /category/update
//参数 ：参见category表
router.post("/update", async (req, res) => {
  //验证用户Token 请求头中携带Token  req.headers.authorization=
  let user = JWT.getUser(req, res);
  if (user == null) return;

  try {
    //获取数据，验证数据
    let category = req.body;
		category.id = parseInt(category.id) || 0 ;
    
    if (!category.name) throw new Error("字段（name）不能为空");
    //如果需要的话，可以继续对其他字段进行验证
		
		//要确保category对象的属性和表lz_plant_family的字段属性名一致。
    //创建sql语句，并执行
    let sql = "";
    if (category.id) { //如果参数id有值的，则更新
      sql = `UPDATE lz_plant_family SET ? WHERE id=${category.id}`;
    } else { // 参数无id值，则新增记录
      sql = `INSERT INTO lz_plant_family SET ?`;
    }		
    let result = await query(sql, [category]);

    //根据sql操作影响的记录行数，判断是否删除成功
    if (result.affectedRows > 0) {
      if (!category.id) category.id = result.insertId; //如果是新增，设置新增的id			
      res.send({ code: 1, msg: "操作成功！", data: category });
      return;
    }
    throw new Error(`操作失败`);
  } catch (error) {
    res.send({ code: -1, msg: error.message });
  }
});

//==================================================
//导出路由器
module.exports = router;
